package com.sz.admin.datainfo.service;

import com.sz.admin.datainfo.pojo.dto.DataStatisticsQueryDTO;
import com.sz.admin.datainfo.pojo.vo.DriverStatisticsVO;
import com.sz.admin.datainfo.pojo.vo.VehicleStatisticsVO;
import com.sz.admin.datainfo.pojo.vo.WorkDataStatisticsVO;
import com.sz.admin.datainfo.pojo.vo.WorkDataGroupedByDateVO;
import com.sz.core.common.entity.PageResult;

import java.util.Map;

/**
 * <p>
 * 数据统计 Service
 * </p>
 *
 * @author sz-admin
 * @since 2025-09-24
 */
public interface DataStatisticsService {

    /**
     * 查询司机统计数据
     *
     * @param dto 查询参数
     * @return 司机统计数据分页结果
     */
    PageResult<DriverStatisticsVO> pageDrivers(DataStatisticsQueryDTO dto);

    /**
     * 查询钩机车辆统计数据
     *
     * @param dto 查询参数
     * @return 钩机车辆统计数据分页结果
     */
    PageResult<VehicleStatisticsVO> pageExcavators(DataStatisticsQueryDTO dto);

    /**
     * 查询运输车车辆统计数据
     *
     * @param dto 查询参数
     * @return 运输车车辆统计数据分页结果
     */
    PageResult<VehicleStatisticsVO> pageTransportVehicles(DataStatisticsQueryDTO dto);

    /**
     * 统计各类数据总数
     *
     * @param month 月份(格式: yyyy-MM)
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 各类数据总数
     */
    Map<String, Long> getStatisticsCount(String month, java.time.LocalDateTime startTime, java.time.LocalDateTime endTime);

    /**
     * 查询作业数据统计
     *
     * @param dto 查询参数
     * @return 作业数据统计分页结果
     */
    PageResult<WorkDataStatisticsVO> pageWorkData(DataStatisticsQueryDTO dto);

    /**
     * 根据司机ID查询作业数据统计，按日期分组
     *
     * @param dto 查询参数
     * @param driverId 司机ID
     * @return 作业数据统计分页结果
     */
    PageResult<WorkDataStatisticsVO> pageWorkDataByDriverId(DataStatisticsQueryDTO dto, Long driverId);

    /**
     * 根据司机ID查询作业数据统计，按日期分组返回两层结构
     *
     * @param dto 查询参数
     * @param driverId 司机ID
     * @return 按日期分组的作业数据统计结果
     */
    PageResult<WorkDataGroupedByDateVO> pageWorkDataByDriverIdGroupedByDate(DataStatisticsQueryDTO dto, Long driverId);

    /**
     * 根据车辆ID查询作业数据统计，按日期分组返回两层结构
     *
     * @param dto 查询参数
     * @param vehicleId 车辆ID
     * @return 按日期分组的作业数据统计结果
     */
    PageResult<WorkDataGroupedByDateVO> pageWorkDataByVehicleIdGroupedByDate(DataStatisticsQueryDTO dto, Long vehicleId);
}